import axios from 'axios'
import Base from '@/common/js/common.js'
import errorCode from '@/common/js/utils/errorCode.js'
import {
	login,
	getInfo
} from "@/common/js/api/user.js";

axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
// 创建axios实例
const service = axios.create({
	// axios中请求配置有baseURL选项，表示请求URL公共部分
	baseURL: Base.server_path,
	// 超时
	timeout: 10000
})

// request拦截器
service.interceptors.request.use(config => {
	// 是否需要设置 token
	const isToken = (config.headers || {}).isToken === false
	let token = uni.getStorageSync("token");
	if (token && !isToken) {
		config.headers['type'] = 'app'
		config.headers['Authorization'] = 'Bearer ' + token // 让每个请求携带自定义token 请根据实际情况自行修改
	}
	// get请求映射params参数
	if (config.method === 'get' && config.params) {
		let url = config.url + '?';
		for (const propName of Object.keys(config.params)) {
			const value = config.params[propName];
			var part = encodeURIComponent(propName) + "=";
			if (value !== null && typeof(value) !== "undefined") {
				if (typeof value === 'object') {
					for (const key of Object.keys(value)) {
						let params = propName + '[' + key + ']';
						var subPart = encodeURIComponent(params) + "=";
						url += subPart + encodeURIComponent(value[key]) + "&";
					}
				} else {
					url += part + encodeURIComponent(value) + "&";
				}
			}
		}
		url = url.slice(0, -1);
		config.params = {};
		config.url = url;
	}
	return config
}, error => {
	// console.log(error)
	Promise.reject(error)
})


//真机获取
axios.defaults.adapter = function(config) {
	return new Promise((resolve, reject) => {
		var settle = require('axios/lib/core/settle');
		var buildURL = require('axios/lib/helpers/buildURL');
		uni.request({
			method: config.method.toUpperCase(),
			url: config.baseURL + config.url,
			header: config.headers,
			data: config.data,
			dataType: config.dataType,
			responseType: config.responseType,
			sslVerify: config.sslVerify,
			complete: function complete(response) {
				// console.log(response)
				response = {
					data: response.data,
					status: response.statusCode,
					errMsg: response.errMsg,
					header: response.header,
					config: config
				};
				settle(resolve, reject, response);
			}
		})
	})
}


// 响应拦截器
service.interceptors.response.use(res => {
		// 未设置状态码则默认成功状态
		const code = res.data.code || 200;
		// 获取错误信息
		const msg = errorCode[code] || res.data.msg || errorCode['default']
		if (code === 401 || code === 402) {
			uni.showModal({
				title: '提示',
				content: "'温馨提示':'您还没有登录，是否去登录'",
				showCancel: true,
				cancelColor: "#555",
				confirmColor: "#e41f19",
				confirmText: "确定",
				cancelText: "取消",
				success(res) {
					if (res.confirm) {
						uni.redirectTo({
							url: '/pages/login/login',
						})
					} else {
						uni.navigateBack({
							delta: 1,
							fail: (res) => {
								uni.switchTab({
									url: '/pages/index/index',
								})
							}
						})
					}
				}
			})
		} else if (code !== 200) {
			// console.log(res.data)
			uni.showToast({
				title: msg,
				icon: "none",
				duration: 2000,
			})
			return Promise.reject(msg)
		} else {
			return res.data
		}
	},
	error => {
		// console.log('err' + error)
		let {
			message
		} = error;
		if (message == "Network Error") {
			message = "后端接口连接异常";
		} else if (message.includes("timeout")) {
			message = "系统接口请求超时";
		} else if (message.includes("Request failed with status code")) {
			message = "系统接口" + message.substr(message.length - 3) + "异常";
		}
		uni.showToast({
			title: message,
		});
		return Promise.reject(error);
	}
)

export default service;
